home *** CD-ROM | disk | FTP | other *** search
- This directory contains the distribution of Scheme Library slib2a2.
- Slib conforms to Revised^4 Report on the Algorithmic Language Scheme
- and the IEEE P1178 specification. Slib supports Unix and similar
- systems, VMS, and MS-DOS.
-
- The maintainer can be reached at jaffer@ai.mit.edu or
- Aubrey Jaffer, 84 Pleasant St., Wakefield MA 01880-1846.
-
- MANIFEST
-
- `README' is this file. It contains a MANIFEST, INSTALLATION
- INSTRUCTIONS, and proposed coding standards.
- `FAQ' Frequently Asked Questions and answers.
- `ChangeLog' documents changes to slib.
- `slib.texi' has documentation on library packages in TexInfo format.
-
- `Template.scm' Example configuration file. Copy and customize to
- reflect your system.
- `chez.init' is a configuration file for Chez Scheme.
- `elk.init' is a configuration file for ELK 2.1
- `gambit.init' is a configuration file for Gambit Scheme.
- `macscheme.init' is a configuration file for MacScheme.
- `mitscheme.init' is a configuration file for MIT Scheme.
- `mitcomp.pat' is a patch file which adds definitions to SLIB files
- for the MitScheme compiler.
- `scheme2c.init' is a configuration file for DEC's scheme->c.
- `scheme48.init' is a configuration file for Scheme48.
- `t3.init' is a configuration file for T3.1 in Scheme mode.
- `vscm.init' is a configuration file for VSCM.
- `require.scm' has code which allows system independent access to
- the library files.
-
- `format.scm' has Common-Lisp style format.
- `formatst.scm' has code to test format.scm
- `pp.scm' has pretty-print.
- `ppfile.scm' has pprint-file and pprint-filter-file.
- `obj2str.scm' has object->string.
- `strcase.scm' has functions for manipulating the case of strings.
- `genwrite.scm' has a generic-write which is used by pp.scm,
- pp2str.scm and obj2str.scm
- `stdio.scm' has printf, fprintf, and sprintf compatible with C.
- `scanf.scm' has scanf, fscanf, and sscanf inspired by C.
- `lineio' has line oriented input/output functions.
- `debug.scm' has qp, a printer safe for circular structures and break
- and continue.
- `trace.scm' has trace and untrace for tracing function execution.
- `test.scm' has routines useful for testing and reporting problems.
- `strport.scm' has routines for string-ports.
-
- `alist.scm' has functions accessing and modifying association lists.
- `hash.scm' defines hash, hashq, and hashv.
- `hashtab.scm' has hash tables.
- `sierpinski.scm' 2-dimensional coordinate hash.
- `soundex.scm' English name hash.
- `logical.scm' emulates 2's complement logical operations.
- `random.scm' has random number generator compatible with Common Lisp.
- `randinex.scm' has inexact real number distributions.
- `prime.scm' has prime? and factor.
- `charplot.scm' has procedure for plotting on character screens.
- `plottest.scm' has code to test charplot.scm.
- `tek40.scm' has routines for Tektronix 4000 series graphics.
- `tek41.scm' has routines for Tektronix 4100 series graphics.
- `getopt.scm' has posix-like getopt for parsing command line arguments.
- `time.scm' has Posix time conversion routines.
- `cltime.scm' has Common-Lisp time conversion routines.
- `comparse.scm' has shell-like command parsing.
-
- `rdms.scm' has code to construct a relational database from a base
- table implementation.
- `alistab.scm' has association list base tables.
- `dbutil.scm' has utilities for creating and manipulating relational
- databases.
- `paramlst.scm' has procedures for passing parameters by name.
- `report.scm' prints database reports.
-
- `record.scm' a MITScheme user-definable datatypes package
- `promise.scm' has code from R4RS for supporting DELAY and FORCE.
-
- `repl.scm' has a read-eval-print-loop.
- `defmacex.scm' has defmacro:expand*.
- `mbe.scm' has "Macro by Example" define-syntax.
- `scmacro.scm' is a syntactic closure R4RS macro package.
- r4rsyn.scm, synclo.scm, synrul.scm have syntax definitions
- and support.
- `scmactst.scm' is code for testing SYNTACTIC CLOSURE macros.
- `scainit.scm' is a syntax-case R4RS macro package.
- scaglob.scm scamacr.scm scaoutp.scm scaexpp.scm have
- syntax definitions and support. `syncase.sh' is a shell
- script for producing the SLIB version from the original.
- `macwork.scm' is a "Macros that work" package.
- mwexpand.scm mwdenote.scm mwsynrul.scm have support.
- mwtest.scm is tests for Macros that work.
- `macrotst.scm' is code from R4RS for testing macros.
-
- `values.scm' is multiple values.
- `queue.scm' has queues and stacks.
-
- `object.scm' is object oriented programming (using no macros).
- `recobj.scm' is records implemented using object.scm.
- `yasyn.scm' is a macro package implementing YASOS using object.scm.
-
- `yasos.scm' is object oriented programming (using R4RS macros).
- `collect.scm' is collection operators (like CL sequences).
- `priorque.scm' has code and documentation for priority queues.
- `rbtree.scm' has red-black trees.
- `rbtest.scm' tests red-black trees.
- `process.scm' has multi-processing primitives.
- `array.scm' has multi-dimensional arrays and sub-arrays.
- `arraymap.scm' has array-map!, array-for-each, and array-indexes.
-
- `sort.scm' has sorted?, sort, sort!, merge, and merge!
- `comlist.scm' has many common list and mapping procedures.
- `tree.scm' has functions dealing with trees.
- `chap.scm' has functions which compare and create strings in
- "chapter order".
-
- `sc4opt.scm' has optional rev4 procedures.
- `sc4sc3.scm' has procedures to make a rev3 implementation run rev4
- code.
- `sc2.scm' has rev2 procedures eliminated in subsequent versions.
- `mularg.scm' redefines - and / to take more than 2 arguments.
- `mulapply.scm' redefines apply to take more than 2 arguments.
- `ratize.scm' has function rationalize from Revised^4 spec.
- `trnscrpt.scm' has transcript-on and transcript-off from Revised^4 spec.
- `withfile.scm' has with-input-from-file and with-output-to-file from R4RS.
- `dynwind.scm' has proposed dynamic-wind from R5RS.
- `dwindtst.scm' has routines for characterizing dynamic-wind.
- `dynamic.scm' has proposed DYNAMIC data type.
- `fluidlet.scm' has fluid-let syntax.
- `struct.scm' has defmacros which implement RECORDS from the book:
- "Essentials of Programming Languages".
- `structure.scm' has syntax-case macros for the same.
- `structst.scm' has test code for struct.scm and structure.scm.
-
- INSTALLATION INSTRUCTIONS
-
- Check the manifest in `README' to find a configuration file for your
- Scheme implementation. Initialization files for most IEEE P1178
- compliant Scheme Implementations are included with this distribution.
-
- If the Scheme implementation supports `getenv', then the value of the
- shell environment variable SCHEME_LIBRARY_PATH will be used for
- `(library-vicinity)' if it is defined. Currently, Chez, Elk,
- MITScheme, scheme->c, VSCM, and SCM support `getenv'.
-
- You should check the definitions of `software-type',
- `scheme-implementation-version', `implementation-vicinity', and
- `library-vicinity' in the initialization file. There are comments in
- the file for how to configure it.
-
- Once this is done you can modify the startup file for your Scheme
- implementation to `load' this initialization file. SLIB is then
- installed.
-
- Multiple implementations of Scheme can all use the same SLIB
- directory. Simply configure each implementation's initialization file
- as outlined above.
-
- The SCM implementation does not require any initialization file as
- SLIB support is already built in to SCM. See the documentation with
- SCM for installation instructions.
-
- SLIB includes methods to create heap images for the VSCM and Scheme48
- implementations. The instructions for creating a VSCM image are in
- comments in `vscm.init'. To make a Scheme48 image, `cd' to the SLIB
- directory and type `make slib48'. This will also create a shell script
- with the name `slib48' which will invoke the saved image.
-
- PORTING INSTRUCTIONS
-
- If there is no initialization file for your Scheme implementation, you
- will have to create one. Your Scheme implementation must be largely
- compliant with `IEEE Std 1178-1990' or `Revised^4 Report on the
- Algorithmic Language Scheme' to support SLIB.
-
- `Template.scm' is an example configuration file. The comments inside
- will direct you on how to customize it to reflect your system. Give
- your new initialization file the implementation's name with `.init'
- appended. For instance, if you were porting `foo-scheme' then the
- initialization file might be called `foo.init'.
-
- Your customized version should then be loaded as part of your scheme
- implementation's initialization. It will load `require.scm' from the
- library; this will allow the use of `provide', `provided?', and
- `require' along with the "vicinity" functions. The rest of the
- library will then be accessible in a system independent fashion.
-
- Please mail new working configuration files to `jaffer@ai.mit.edu' so
- that they can be included in the SLIB distribution.
-
- CODING STANDARDS
-
- All library packages are written in IEEE P1178 Scheme and assume that
- a configuration file and `require.scm' package have already been
- loaded. Other versions of Scheme can be supported in library packages
- as well by using, for example, `(provided? 'rev3-report)' or `(require
- 'rev3-report)'.
-
- `require.scm' defines `*catalog*', an association list of module
- names and filenames. When a new package is added to the library, an
- entry should be added to `require.scm'. Local packages can also be
- added to `*catalog*' and even shadow entries already in the table.
-
- The module name and `:' should prefix each symbol defined in the
- package. Definitions for external use should then be exported by having
- `(define foo module-name:foo)'.
-
- Submitted packages should not duplicate routines which are already in
- SLIB files. Use `require' to force those features to be supported in
- your package. Care should be taken that there are no circularities in
- the `require's and `load's between the library packages.
-
- Documentation should be provided in Emacs Texinfo format if possible,
- But documentation must be provided.
-